﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MAPDavy.Entities;

namespace MAPDavy.Repository
{
    public class AnioLectivoRepository: MasterRepository,IAnioLectivoRepository 
    {
        public List<AnioLectivo> GetAllFromAnioLectivo()
        {
            var query = from a in Context.AniosLectivos
                        orderby a.Anio descending
                        select a;

            return query.ToList(); 
        }

        public AnioLectivo GetAnioLectivoByAnio(string anio)
        {
            var query = from a in Context.AniosLectivos
                        where a.Anio.Equals(anio)
                        select a;

            return query.SingleOrDefault(); 
        }

        public void RegistrarAnioLectivo(AnioLectivo anio)
        {
            var existe = (from a in Context.AniosLectivos
                       where a.Anio.Equals(anio.Anio)
                       select a).SingleOrDefault() ;
           
            if (existe == null)
            {
                Context.AniosLectivos.Add(anio);
                Context.SaveChanges(); 
            }
            else
            {
                existe.Descripcion = anio.Descripcion;
                existe.Color = anio.Color;
                existe.InicioAcademico = anio.InicioAcademico.Value;
                existe.NroDiasClase = anio.NroDiasClase.Value;
                existe.Cerrado = anio.Cerrado;

                Context.Entry(existe).State = System.Data.EntityState.Modified;
                Context.SaveChanges();
            }
        }

        public void AddAnioLectivo(AnioLectivo anio)
        {
            Context.AniosLectivos.Add(anio);
            Context.SaveChanges();
        }

        public void EditAnioLectivo(AnioLectivo anio)
        {
            var existe = (from a in Context.AniosLectivos
                          where a.Anio.Equals(anio.Anio)
                          select a).SingleOrDefault();

            if (existe != null)
            {
                existe.Descripcion = anio.Descripcion;
                existe.InicioAcademico = anio.InicioAcademico;
                existe.NroDiasClase = anio.NroDiasClase;
                existe.Color = anio.Color;
                existe.Cerrado = anio.Cerrado;

                Context.Entry(existe).State = System.Data.EntityState.Modified;
                Context.SaveChanges();
            }
        }

        public void DeleteAnioLectivo(string anio)
        {
            var existe = (from a in Context.AniosLectivos
                          where a.Anio.Equals(anio)
                          select a).SingleOrDefault();

            if (existe !=null)
            {
                Context.AniosLectivos.Remove(existe);
                Context.SaveChanges();
            }              
        }




        public bool CanDelete(string anio)
        {
            bool can = true;

            var anioD = (from a in Context.AniosLectivos
                       .Include("SeccionTutors")
                       .Include("Terms")
                        where a.Anio == anio
                        select a).SingleOrDefault();
            if (anioD!=null)
            {
                if (anioD.SeccionTutors.Count > 0 || anioD.Terms.Count > 0)
                {
                    can = false;
                }
            }
            else
            {
                can = false;
            }

            return can;
        }
    }
}
